package com.huihe.storage.repository.Impl;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.huihe.common.enums.DelFlagEnum;
import com.huihe.storage.entity.SysRole;
import com.huihe.storage.mapper.SysRoleMapper;
import com.huihe.storage.repository.SysRoleRepository;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;

/**
 * 角色 Repository 层
 */
@Service
public class SysRoleRepositoryImpl extends ServiceImpl<SysRoleMapper, SysRole> implements SysRoleRepository {

    /**
     * 条件查询-不分页
     * @param map 条件
     * @return 查询结果
     */
    @Override
    public List<SysRole> findByList(Map<String, Object> map) {
        LambdaQueryWrapper<SysRole> wrapper = buildQueryWrapper(map);
        return getBaseMapper().selectList(wrapper);
    }

    /**
     * 条件查询-分页
     * @param map 条件
     * @return 查询结果
     */
    @Override
    public IPage<SysRole> findByPage(Map<String, Object> map) {
        LambdaQueryWrapper<SysRole> wrapper = buildQueryWrapper(map);
        Page<SysRole> page = new Page<>(Long.parseLong((String) map.get("page")),Long.parseLong((String) map.get("size")));
        return getBaseMapper().selectPage(page,wrapper);
    }

    /**
     * 构建通用的查询条件
     * @param map 查询参数
     * @return LambdaQueryWrapper
     */
    private LambdaQueryWrapper<SysRole> buildQueryWrapper(Map<String, Object> map) {
        LambdaQueryWrapper<SysRole> wrapper = new LambdaQueryWrapper<>();
        //添加 角色名 like 条件
        if (map.containsKey("roleName")){
            String roleName = (String) map.get("roleName");
            wrapper.like(StrUtil.isNotBlank(roleName),SysRole::getRoleName,roleName);
        }
        //添加 创建时间 between 条件
        if (map.containsKey("startTime") && map.containsKey("endTime")){
            String startTime = (String) map.get("startTime");
            String endTime = (String) map.get("endTime");
            wrapper.between(StrUtil.isNotBlank(startTime) && StrUtil.isNotBlank(endTime),SysRole::getCreateTime,startTime,endTime);
        }
        //根据 是否禁用 eq 条件
        if (map.containsKey("status")){
            String status = (String) map.get("status");
            wrapper.eq(StrUtil.isNotBlank(status),SysRole::getStatus,status);
        }
        //未删除 eq 条件
        wrapper.eq(SysRole::getDelFlag, DelFlagEnum.OK.getCode());
        return wrapper;
    }
}
